package com.moyuwanjia.service.Impl;

import com.moyuwanjia.Dao.IAccountDao;
import com.moyuwanjia.entity.Account02;
import com.moyuwanjia.service.IAccountService;

import java.util.List;

/**
 * @author 摸鱼丸加~
 * @create 2022-04-24 11:08
 * 该service使用了基于接口的动态代理去控制事务的执行流程，修改时只需要通过修改
 * 代理中的增强代码即可。
 * 其中的方法只是普通的方法，通过代理的方式增强后，也能携带事务控制的能力
 *
 */
public class IAccountServiceImpl implements IAccountService {
    private IAccountDao accountDao;


    public void setAccountDao(IAccountDao accountDao){
        this.accountDao = accountDao;
    }

    public List<Account02> findAll() {
        return accountDao.findAll();
    }

    public Account02 findAccountById(Integer id) {
        return accountDao.findAccountById(id);
    }

    public void saveAccount(Account02 account02) {
        accountDao.saveAccount(account02);
//        int i = 1/0;
    }

    public void updateAccount(Account02 account02) {
        accountDao.updateAccount(account02);
    }

    public void deleteAccountById(Integer id) {
        accountDao.deleteAccountById(id);
    }

    /**
     *
     * @param sourceName 转出账户名称
     * @param targetName 转入账户名称
     * @param money 转账金额
     * 转账操作：
     *         1.根据名称查询转出账户
     *         2.根据名称查询转入账户
     *         3.转出账户减金额
     *         4.转入账户加金额
     *         5.更新转入、转出账户
     */
    @Override
    public void transfer(String sourceName, String targetName, Float money) {
        Account02 accountByName_source = accountDao.findAccountByName(sourceName);//转出账户
        Account02 accountByName_target = accountDao.findAccountByName(targetName);//转入账户
        accountByName_source.setMoney(accountByName_source.getMoney() - money);
        accountByName_target.setMoney(accountByName_target.getMoney() + money);
        //更新转入转出账户
        accountDao.updateAccount(accountByName_source);
//        int a = 10/0;
        accountDao.updateAccount(accountByName_target);
    }
}
